package com.sqx.modules.trends.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sqx.modules.goods.entity.Goods;
import com.sqx.modules.goods.vo.GoodsVo;
import com.sqx.modules.scFollow.entity.ScFollow;
import com.sqx.modules.trends.entity.Trends;
import com.sqx.modules.trends.vo.TrendsVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 用户动态 Mapper 接口
 * </p>
 *
 * @author wuChang
 * @since 2023-09-26
 */
@Mapper
public interface TrendsDao extends BaseMapper<Trends> {

    IPage<TrendsVo> getTrendsList(@Param("pages") Page<TrendsVo> pages, @Param("byUserId") Long byUserId, @Param("trendsVo") TrendsVo trendsVo);

    TrendsVo getTrendsInfo(@Param("byUserId") Long byUserId, @Param("trendsId") Long trendsId);

    int getDayTrendsCount(@Param("userId") Long userId);

    IPage<TrendsVo> getAllTrendsList(@Param("pages") Page<TrendsVo> pages,
                                     @Param("byUserId") Long byUserId,
                                     @Param("userId") Long userId,
                                     @Param("trendsVo") TrendsVo trendsVo);

    IPage<TrendsVo> getAllTrendsList1(@Param("pages") Page<TrendsVo> pages,
                                      @Param("byUserId") Long byUserId,
                                      @Param("userId") Long userId,
                                      @Param("trendsVo") TrendsVo trendsVo);

    IPage<TrendsVo> getAllTrendsList2(@Param("pages") Page<TrendsVo> pages,
                                      @Param("byUserId") Long byUserId,
                                      @Param("userId") Long userId,
                                      @Param("trendsVo") TrendsVo trendsVo);

    IPage<TrendsVo> getLatestRecommendedGoods(@Param("pages") Page<TrendsVo> pages,
                                              @Param("goodIdsList") List<Long> goodIdsList);

    IPage<Goods> getGoodsByTypeExcludingIds(@Param("pages") Page<TrendsVo> pages,
                                            @Param("userId") Long userId,
                                            @Param("typeIds") Set<Long> typeIds,
                                            @Param("allGoodIds") Set<Long> allGoodIds);

    List<Trends> selectDynamicHomepage(@Param("params") Map<String, Object> params);

    Page<TrendsVo> selectByMyCollect(@Param("pages") Page<TrendsVo> pages,
                                     @Param("userId") Long userId,
                                     @Param("follow") ScFollow follow);

    int selectByLikeCount(@Param("byUserId") Long byUserId,
                          @Param("trendsId") Long trendsId);

    int selectByCommentCount(@Param("byUserId") Long byUserId,
                             @Param("trendsId") Long trendsId);

    IPage<Trends> selectTrendsWithGoodsAndCounts(@Param("pages")IPage<Trends> pages,
                                                 @Param("byUserId") Long byUserId);

    Integer updateByTrendsId(@Param("trendsId") Long trendsId);

    IPage<TrendsVo> getTrendsLists(@Param("pages") Page<TrendsVo> pages, @Param("byUserId") Long byUserId, @Param("trendsVo") TrendsVo trendsVo);

    IPage<TrendsVo> getTrendsListByUserId(@Param("pages") Page<TrendsVo> pages, @Param("byUserId") Long byUserId, @Param("trendsVo") TrendsVo trendsVo);

    Integer selectLikeCountByTrendsId(@Param("trendsId") Long trendsId);

    int selectCountByUserId(@Param("userId")Long userId);
}
